// 导入axios
import axios from 'axios'
// 克隆axioxs对像并设置基地址
const request = axios.create({
    // baseURL: 'http://toutiao.itheima.net/'
    baseURL: 'http://geek.itheima.net/'
})
// 加请求拦截
// 导入vuex对象
import store from '@/store'
request.interceptors.request.use(function (config) {
    // 第一个函数是发请求时会立即拦截待用的函数
    if (store.state.tokenObj.token) {
        config.headers.Authorization = 'Bearer ' + store.state.tokenObj.token
    }
    // 判断该页面是无token，有token加token
    return config
}, function (error) {
    // 第二个函数是请求出错调用的函数（用不上）
    return Promise.reject(error)
})


// 响应拦截(用于token更新)
// 因为router是挂载在vue原型里的，所以只能在vue实例中使用，而现在的是js文件所以无法直接使用，需要导入一下router
import router from '@/router'
// 导入轻提示
import {
    Toast
} from 'vant';
request.interceptors.response.use(function (response) {
    return response
}, async function (error) {
    try {
        // 判断该响应回来的status是不是401：表示token过期
        if (error.response.status === 401) {
            // 发起axios请求利用refresh_token获取新的token
            let res = await axios({
                url: 'http://toutiao.itheima.net/v1_0/authorizations',
                method: 'put',
                headers: {
                    Authorization: 'Bearer ' + store.state.tokenObj.refresh_token
                }
            })
            //   将获取到的新token保存到vuex
            store.commit('saveToken', {
                token: res.data.data.token,
                refresh_token: store.state.tokenObj.refresh_token
            })
            // 实现无感刷新（即无需让用户自己刷新）
            return request(error.config)
        }
        return Promise.reject(error)
    } catch {
        // 到这里就带代表refren_token也过期了
        // 打回登录页面
        // 轻提示用户需要从新登录
        router.push('/login')
        Toast.fail('登录已过期，请从新登录')
    }

})
// 暴露接口
export default request